// 这里的window为了减少代码和加强运行效率的
// undefined  防止篡改  方法已经过时
(function (a, undefined) {
  // 借用init中转，去除关键字new
  let jQuery = function (el) {
    return new init(el);
  };

  // 将js标签对象依次添加到JQ实例上
  // 伪数组==={1:val,2:val,3:val......,length:n...}
  // this 问题 ===> new原理
  function init(el) {
    let els = document.querySelectorAll(el);
    Array.prototype.push.apply(this, els);
  }

  // 原型上的方法
  init.prototype = {
    // 原型CSS方法 仿写
    css(styleName, Val) {
      for (let i = 0; i < this.length; i++) {
        this[i].style[styleName] = Val;
      }
      return this; //保证CSS方法的链式调用 返回处理过的JQ对象
    },
    ajax() {},
    attr() {},
    addClass() {},
  };

  // 把 静态方法 追加到原型上 开发时追加原型方法
  jQuery.extend = function (object) {
    for (let key in object) {
      init.prototype[key] = object[key];
    }
  };

  // 这里的a
  // 闭包原理：函数套函数 外部函数调用 内部引用外部变量；
  // 同时向外部暴露一个方法使用
  a.jQuery = a.$ = jQuery;
})(window);
